#ifndef GAMEAPPLICATION_H
#define GAMEAPPLICATION_H

#include "gdn/Application.h"
#include "GameFileManager.h"
#include "GameConfigManager.h"
#include "GameResourceManager.h"
#include "GameFile.h"

class GameApplication : public gdn::Application
{
	public:
		GameApplication();
		virtual ~GameApplication();


		virtual int Run();
		virtual void Close();


		virtual void AddScene( const std::string& name, gdn::Scene* scene );
		virtual void RemoveScene( const std::string& name );

		virtual bool DoesSceneExist( const std::string& name ) const;
		virtual std::vector< std::string > GetSceneList() const;
		virtual gdn::Scene* FindScene( const std::string& name ) const;

		virtual void SetActiveScene( const std::string& name );
		virtual const std::string& GetActiveSceneName() const;


		gdn::FontManager Fonts;
		gdn::ImageManager Images;
		gdn::SoundManager Sounds;
		//gdn::MusicManager Music;

		GameFileManager GameFiles;
		GameConfigManager GameConfig;
		GameResourceManager GameResources;

		GameFile CurrentFile;

	protected:
		virtual void Construct( const gdn::Vector2i& windowSize, unsigned int windowBpp, const std::string& windowTitle );
		virtual void Destruct();
};

#endif // GAMEAPPLICATION_H
